export default class Timer implements ITimer {

  startTime: number | null = null;

  endTime: number | null = null;

  nowTime: number | null = null;

  constructor(updateCb?: Function) {
    this.update(updateCb);
  }

  /**
   * 开始计时。
   */
  start() {
    this.startTime = new Date().getTime();
    this.nowTime = 0;
  }

  /**
   * 停止计时。
   */
  stop() {
    this.endTime = new Date().getTime();
  }

  /**
   * 获取持续时间（秒）。
   * @returns 持续时间（秒），若未开始或未停止则返回null。
   */
  getDuration() {
    if (this.endTime === null || this.startTime === null) return null;
    return (this.endTime - this.startTime) / 1000;
  }

  /**
    * 获取持续时间的字符串表示。
    * @returns 持续时间的字符串形式，如“X秒”，若未开始或未停止则返回null。
    */
  getDurationStr() {

    let time = this.getDuration();
    if (time === null) return null;

    // 转化为秒
    time = time / 1000;

    return `${time}秒`;
  }

  /** 重置计时器 */
  reset() {
    this.startTime = null;
    this.endTime = null
  }

  update(updateCb?: Function) {
    setInterval(() => {
      if (this.nowTime === null) this.nowTime = 0
      this.nowTime++

      if (typeof updateCb === 'function') {
        updateCb(this.nowTime, this)
      }
    }, 1000)
  }
}
